package br.com.syswill.boaviagem.dao;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import br.com.syswill.boaviagem.domain.Viagem;

public class ViagemDAO extends BoaViagemDAO {

	public static final String TABELA = "viagem";
	public static final String _ID = "_id";
	public static final String DESTINO = "destino";
	public static final String DATA_CHEGADA = "data_chegada";
	public static final String DATA_SAIDA = "data_saida";
	public static final String ORCAMENTO = "orcamento";
	public static final String QUANTIDADE_PESSOAS = "quantidade_pessoas";
	public static final String TIPO_VIAGEM = "tipo_viagem";
	public static final String[] COLUNAS = new String[] { _ID, DESTINO,
			DATA_CHEGADA, DATA_SAIDA, TIPO_VIAGEM, ORCAMENTO,
			QUANTIDADE_PESSOAS };

	public ViagemDAO(Context context) {
		super(context);
	}

	public List<Viagem> listarViagens() {
		Cursor cursor = getDb().query(TABELA, COLUNAS, null, null, null, null,
				null);
		List<Viagem> viagens = new ArrayList<Viagem>();
		while (cursor.moveToNext()) {
			viagens.add(criarViagem(cursor));
		}
		cursor.close();
		return viagens;
	}

	public Viagem buscarViagemPorId(Long id) {
		Cursor cursor = getDb().query(TABELA, COLUNAS, _ID + " = ?",
				new String[] { id.toString() }, null, null, null);
		Viagem viagem = new Viagem();
		if (cursor.moveToNext()) {
			viagem = criarViagem(cursor);
			cursor.close();
		}
		return viagem;
	}

	public long inserir(Viagem viagem) {
		return getDb().insert(TABELA, null, getContentValues(viagem));
	}

	public long atualizar(Viagem viagem) {
		return getDb().update(TABELA, getContentValues(viagem), _ID + " = ?",
				new String[] { viagem.getId().toString() });
	}

	public boolean removerViagem(Long id) {
		String whereClause = _ID + " = ?";
		String[] whereArgs = new String[] { id.toString() };
		int removidos = getDb().delete(TABELA, whereClause, whereArgs);
		return removidos > 0;
	}

	private Viagem criarViagem(Cursor cursor) {
		Viagem viagem = new Viagem(cursor.getLong(cursor.getColumnIndex(_ID)),
				cursor.getString(cursor.getColumnIndex(DESTINO)),
				cursor.getInt(cursor.getColumnIndex(TIPO_VIAGEM)), new Date(
						cursor.getLong(cursor.getColumnIndex(DATA_CHEGADA))),
				new Date(cursor.getLong(cursor.getColumnIndex(DATA_SAIDA))),
				cursor.getDouble(cursor.getColumnIndex(ORCAMENTO)),
				cursor.getInt(cursor.getColumnIndex(QUANTIDADE_PESSOAS)));
		return viagem;
	}

	public ContentValues getContentValues(Viagem viagem) {
		ContentValues values = new ContentValues();
		values.put(DESTINO, viagem.getDestino());
		values.put(TIPO_VIAGEM, viagem.getTipoViagem());
		values.put(DATA_CHEGADA, viagem.getDataChegada().getTime());
		values.put(DATA_SAIDA, viagem.getDataSaida().getTime());
		values.put(ORCAMENTO, viagem.getOrcamento());
		values.put(QUANTIDADE_PESSOAS, viagem.getQuantidadePessoas());

		return values;
	}

}
